#! /bin/bash

# Author : Jiahuan Li <huanlf@gmail.com>
# License: GPLv2
# Date   : 2007/06/22 
# Desc : make use of cdrocord to burn cd/dvd disk

ERASE= # 擦除RW光盘
BURN=  # 烧刻

## 检查是否已经安装cdrecord
which cdrecord &>/dev/null || {
    echo "cdrecord not installed"
    exit 127
}

## 用法
usage () {
    cat <<-EOF

    $0 功能：擦除RW光盘，刻录ISO
    用法: $0 [ options ] [ xxx.iso ]
    options:
            -e 擦除RW光盘
            -b 刻录
            -h 打印本条帮助信息
    说明：
    对于CD-R/DVD-R来说， 不需要指定options, 指定iso后直接刻录
    对于CD-RW/DVD-RW来说, 需要先擦写再记录，即需要指定 -e -b 参数

EOF

    exit 1
}

## 要求至少有一个参数
[[ -n $1 ]] || usage

while getopts 'ebh' opt; do
    case $opt in
    e)
        ERASE=true;;
    b)  
        BURN=true;;
    *)
        usage;;
    esac
done

## 去掉 -e/-b， iso=xxx.iso
shift $(( OPTIND -1 ))
iso=$1

## 检查$iso是否为iso文件
[[ -n $iso ]] && {
    file $iso | grep -q 'ISO 9660'; RC=$?
    [[ $RC != 0 ]] && {
        echo "Target is not a ISO file, aborting ..."
        exit 127
    }   
}

## 导入usb光驱驱动模块, 一般不需要手工导入，udev在开机时会加载
## 止处是防止模块被列入黑名单 
#modprobe sr_mod 2>/dev/null
#modprobe sg 2>/dev/null
modprobe sr_mod 2>/dev/null
modprobe sg 2>/dev/null

## 探测刻录光驱是哪个设备
if [[ -e /dev/cdrw ]]; then
    rw_dev=/dev/cdrw
elif [[ -e /dev/dvdrw ]]; then
    rw_dev=/dvdrw
else
    rw_dev=$( cdrecord -scanbus 2>/dev/null | awk '/RW/ {print $1}' )
fi

## 找不到刻录光驱,退出
[[ -z $rw_dev ]] && {
    echo "Can not found RW device, aborting ..."
    exit 127
}
echo "Found RW device: $rw_dev"

## umount先
umount $rw_dev 2>/dev/null

RC=0

## 如果没有指定要擦除或刻录，则直接刻录( CD-R， DVD-R 盘不用擦，直接刻 )
if [[ -z "$ERASE$BURN" ]]; then
    cdrecord dev=$rw_dev blank=fast && cdrecord dev=$rw_dev $iso;
else
    ## 如果指定擦盘
    [[ -n $ERASE ]] && { cdrecord dev=$rw_dev blank=fast; RC=$?; }
    ## 如果指定刻盘
    [[ -n $BURN ]]  && (( RC == 0 )) && [[ -n $iso ]] && cdrecord dev=$rw_dev $iso
fi

## modprobe -r cdrom sg sg_mod sr_mod 2>/dev/null
## 弹出光驱
{ eject && sleep 5 && eject -t; } &>/dev/null &
